package org.jeecg.modules.putil;

import org.apache.shiro.SecurityUtils;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.mapper.SysUserMapper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Optional;

/**
 * @Description:
 * @Author: Planifolia.Van
 * @Date: 2025/1/16 14:08
 */
@Component
public class LoginUserUtil {
    @Resource
    private SysUserMapper sysUserMapper;

    /**
     * 获取当前登录人信息
     *
     * @return 获取到的LoginUser
     */
    public LoginUser getLoginUser() {
        try {
            return (LoginUser) SecurityUtils.getSubject().getPrincipal();
        } catch (Exception e) {
            throw new JeecgBootException("错误的登录信息！");
        }
    }

    /**
     * 获取用户信息从数据库中加载
     *
     * @return 当前登陆人的信息
     */
    public SysUser getLoginUserByDB() {
        LoginUser loginUser = getLoginUser();
        return Optional.ofNullable(sysUserMapper.selectById(loginUser.getId())).orElseThrow(() -> new JeecgBootException("无法找到对应的用户信息！"));
    }

    /**
     * 校验操作用户是否本人
     *
     * @param userId 被判断ID
     * @return 是否是本人
     */
    public Boolean optUserCheckerBL(String userId) {
        return getLoginUser().getId().equals(userId);
    }

    /**
     * 判断操作用户是否本人
     *
     * @param userId 被判断ID
     */
    public void optUserCheckerExp(String userId) {
        if (!optUserCheckerBL(userId))
            throw new JeecgBootException("操作用户不是本人！");
    }
}
